//==============================================================================
// Project   : Master of Advanced Studies in Software-Engineering 2014
// Modul     : Projektarbeit OO Softwareentwicklung "Warenautomat"
//             Teil: Design&Implementation
// Title     : Test-Applikation
// Author    : `Ihr Name`
// Tab-Width : 2
/*///===========================================================================

 * Description:
 Test-Applikation um die Klassen-Bibliothek des Waren-Automaten zu testen.

 CVS: $Revision: 1.9 $  $Date: 2014/05/17 18:10:15 $ 
 /*///===========================================================================
//       1         2         3         4         5         6         7         8
//345678901234567890123456789012345678901234567890123456789012345678901234567890
//==============================================================================

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import warenautomat.*;

public class WarenAutomatTest {

   public static void main(String[] args) throws ParseException {

      DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.GERMAN);

      {
         Automat automat = new Automat();
         SystemSoftware.erzeugeGUI(automat);
         SystemSoftware.setzeAktuellesDatum(df.parse("20.05.2014"));
         SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");

         System.out.println("=== Ware-Test: =================================");
         Date wareOk = df.parse("21.05.2014");
         Date wareNotOk = df.parse("20.05.2014");
         Date wareNotOk2 = df.parse("19.05.2014");

         Ware ware1 = new Ware("Mars", 100, wareOk);
         Ware ware2 = new Ware("Twix", 250, wareNotOk);
         Ware ware3 = new Ware("Twix", 250, wareNotOk2);

         System.out.println("  Ware:" + ware1.getName() + " \tPreis: " + ware1.getPreisInRappen() + "Rp. \tist abgelaufen: "
               + (ware1.getIstAbgelaufen() == true ? "ja" : "nein") + "\t(" + formatter.format(ware1.getAblaufDatum()) + ")");
         System.out.println("  Ware:" + ware2.getName() + " \tPreis: " + ware2.getPreisInRappen() + "Rp. \tist abgelaufen: "
               + (ware2.getIstAbgelaufen() == true ? "ja" : "nein") + "\t(" + formatter.format(ware2.getAblaufDatum()) + ")");
         System.out.println("  Ware:" + ware3.getName() + " \tPreis: " + ware3.getPreisInRappen() + "Rp. \tist abgelaufen: "
               + (ware3.getIstAbgelaufen() == true ? "ja" : "nein") + "\t(" + formatter.format(ware3.getAblaufDatum()) + ")");

         System.out.println("=== Fach-Test: =================================");
         Fach fach1 = new Fach();
         Ware fachWare = fach1.getWare();
         if (fachWare != null) {
            System.out.println("Fehler: Fach ist nicht leer");
         }
         fach1.fuelleFach(ware1);
         System.out.println("  Fach1:" + fach1.getWare().getName() + " \tPreis: " + fach1.getWare().getPreisInRappen() + "Rp. \tist abgelaufen: "
               + (fach1.getWare().getIstAbgelaufen() == true ? "ja" : "nein") + "\t(" + formatter.format(fach1.getWare().getAblaufDatum()) + ")");
         System.out.println("  Leere Fach.");
         fach1.leereFach();
         if (fachWare != null) {
            System.out.println("Fehler: Fach ist nicht leer");
         }
         System.out.println("  Fach ist leer.");

         System.out.println("=== Drehteller-Test: =================================");

         System.out.println("*** Drehteller Nr.1 mit einem \"Eins\" füllen:");
         automat.fuelleFach(1, "Eins", 1.00, df.parse("01.01.2001"));
         System.out.println("*** automat.drehen():");
         automat.drehen();
         System.out.println("*** Drehteller Nr.2 mit einem \"Zwei\" füllen:");
         automat.fuelleFach(2, "Zwei", 2.00, df.parse("01.01.2002"));
         SystemSoftware.output(false);
         System.out.println("*** automat.drehen():");
         automat.drehen();
         SystemSoftware.output(true);
         System.out.println("*** Drehteller Nr.3 mit einem \"Drei\" füllen:");
         automat.fuelleFach(3, "Drei", 3.00, df.parse("01.01.2003"));
         SystemSoftware.output(false);
         System.out.println("*** Drehen bis Fach Nr.16 vor der üffnung ist:");
         for (int i = 4; i <= 16; i++) {
            automat.drehen();
         }
         SystemSoftware.output(true);
         System.out.println("*** automat.drehen(): jetzt Fach Nr. 1:");
         automat.drehen();
         System.out.println("*** automat.drehen(): jetzt Fach Nr. 2:");
         automat.drehen();
         System.out.println("*** automat.drehen(): jetzt Fach Nr. 3:");
         automat.drehen();

         System.out.println("=== Drehteller-Test. =================================");

         System.out.println("=== üffnen-Test: =====================================");

         System.out.println("*** Drehteller Nr.5 mit einem Mars füllen:");
         automat.fuelleFach(5, "Mars", 1.50, df.parse("01.01.2100"));
         System.out.println("*** Drehteller Nr.5 mit einem Mars füllen:");
         automat.fuelleFach(7, "Twix", 1.70, df.parse("01.01.2100"));
         System.out.println("*** Drehteller Nr.5 mit einem Mars füllen:");
         automat.fuelleFach(6, "Mars", 1.50, df.parse("01.01.2100"));
         System.out.println("*** Drehteller Nr.5 mit einem Mars füllen:");
         automat.fuelleFach(4, "Mars", 1.50, df.parse("01.01.2100"));
         Kasse kasse = automat.gibKasse();
         System.out.println("*** kasse.einnehmen(1.00):");
         kasse.einnehmen(1.00);
         System.out.println("*** kasse.einnehmen(0.50):");
         kasse.einnehmen(0.50);
         System.out.println("*** automat.oeffnen(5):");
         System.out.println("*** automat.oeffnen(5): " + automat.oeffnen(5));

         System.out.println("=== üffnen-Test. =====================================");

         System.out.println("=== Statistik-Test: =====================================");

         System.out.println("*** Automat.gibTotalenWarenWert() = " + automat.gibTotalenWarenWert());
         System.out.println("*** Automat.gibVerkaufsStatistik(Mars,01.01.2010) = " + automat.gibVerkaufsStatistik("Mars",df.parse("01.01.2010")));
         System.out.println("*** Automat.gibVerkaufsStatistik(Mars,20.05.2014) = " + automat.gibVerkaufsStatistik("Mars",df.parse("20.05.2014")));
         System.out.println("*** Automat.gibVerkaufsStatistik(Mars,23.05.2014) = " + automat.gibVerkaufsStatistik("Mars",df.parse("23.05.2014")));
         System.out.println("*** Kasse.gibBetragVerkaufteWaren() = " + kasse.gibBetragVerkaufteWaren() +"Fr.");
         

         System.out.println("=== Statistik-Test. =====================================");
         
         System.out.println("*** Kasse.fuelleKasse() = " + kasse.fuelleKasse(2.00, 99) +"Fr."); kasse.fuelleKasseBestaetigung();
         

      }

   }

}

/*
 * Session-Log:
 * 
 * === Drehteller-Test: =================================
 * Drehteller Nr.1 mit einem "Eins" füllen: 
 * SystemSoftware::zeigeWarenPreisAn(): 1: 1.0
 * SystemSoftware::zeigeVerfallsDatum(): 1: 2
 * automat.drehen():
 * SystemSoftware::zeigeWarenPreisAn(): 1: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 1: 0
 * SystemSoftware::zeigeWarenPreisAn(): 2: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 2: 0
 * SystemSoftware::zeigeWarenPreisAn(): 3: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 3: 0
 * SystemSoftware::zeigeWarenPreisAn(): 4: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 4: 0
 * SystemSoftware::zeigeWarenPreisAn(): 5: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 5: 0
 * SystemSoftware::zeigeWarenPreisAn(): 6: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 6: 0
 * SystemSoftware::zeigeWarenPreisAn(): 7: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 7: 0
 * Drehteller Nr.2 mit einem "Zwei" füllen: 
 * SystemSoftware::zeigeWarenPreisAn(): 2: 2.0
 * SystemSoftware::zeigeVerfallsDatum(): 2: 2 
 * SystemSoftware::output(): false
 * automat.drehen(): 
 * SystemSoftware::output(): true
 * Drehteller Nr.3 mit einem "Drei" füllen: 
 * SystemSoftware::zeigeWarenPreisAn(): 3: 3.0
 * SystemSoftware::zeigeVerfallsDatum(): 3: 2 
 * SystemSoftware::output(): false**
 * Drehen bis Fach Nr.16 vor der üffnung ist: 
 * SystemSoftware::output(): true**
 * automat.drehen(): jetzt Fach Nr. 1: 
 * SystemSoftware::zeigeWarenPreisAn(): 1:
 * 1.0 SystemSoftware::zeigeVerfallsDatum(): 1: 2
 * SystemSoftware::zeigeWarenPreisAn(): 2: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 2: 0
 * SystemSoftware::zeigeWarenPreisAn(): 3: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 3: 0
 * SystemSoftware::zeigeWarenPreisAn(): 4: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 4: 0
 * SystemSoftware::zeigeWarenPreisAn(): 5: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 5: 0
 * SystemSoftware::zeigeWarenPreisAn(): 6: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 6: 0
 * SystemSoftware::zeigeWarenPreisAn(): 7: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 7: 0
 * automat.drehen(): jetzt Fach Nr. 2: 
 * SystemSoftware::zeigeWarenPreisAn(): 1: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 1: 0
 * SystemSoftware::zeigeWarenPreisAn(): 2: 2.0
 * SystemSoftware::zeigeVerfallsDatum(): 2: 2
 * SystemSoftware::zeigeWarenPreisAn(): 3: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 3: 0
 * SystemSoftware::zeigeWarenPreisAn(): 4: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 4: 0
 * SystemSoftware::zeigeWarenPreisAn(): 5: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 5: 0
 * SystemSoftware::zeigeWarenPreisAn(): 6: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 6: 0
 * SystemSoftware::zeigeWarenPreisAn(): 7: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 7: 0
 * automat.drehen(): jetzt Fach Nr.3: 
 * SystemSoftware::zeigeWarenPreisAn(): 1: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 1: 0
 * SystemSoftware::zeigeWarenPreisAn(): 2: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 2: 0
 * SystemSoftware::zeigeWarenPreisAn(): 3: 3.0
 * SystemSoftware::zeigeVerfallsDatum(): 3: 2
 * SystemSoftware::zeigeWarenPreisAn(): 4: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 4: 0
 * SystemSoftware::zeigeWarenPreisAn(): 5: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 5: 0
 * SystemSoftware::zeigeWarenPreisAn(): 6: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 6: 0
 * SystemSoftware::zeigeWarenPreisAn(): 7: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 7: 0 
 * === Drehteller-Test. ================================= 
 * === üffnen-Test: ===================================== 
 * Drehteller Nr.5 mit einem Mars füllen:
 * SystemSoftware::zeigeWarenPreisAn(): 5: 1.5
 * SystemSoftware::zeigeVerfallsDatum(): 5: 1 
 * Automat.gibTotalenWarenWert() = 1.5 
 * kasse.einnehmen(1.00): 
 * SystemSoftware::zeigeBetragAn(): 1.0**
 * kasse.einnehmen(0.50): 
 * SystemSoftware::zeigeBetragAn(): 1.5**
 * automat.oeffnen(5): 
 * Drehteller::oeffnen(): mDrehtellerNr = 5 / mFachVorOeffnung = 3 
 * SystemSoftware::zeigeBetragAn(): 0.0
 * SystemSoftware::entriegeln(): 5 
 * SystemSoftware::zeigeWarenPreisAn(): 5: 0.0
 * SystemSoftware::zeigeVerfallsDatum(): 5: 0 
 * automat.oeffnen(5): true 
 * === üffnen-Test. =====================================
 */
